﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CapaEntidades;
using System.Data;
using System.Data.SqlClient;

namespace CapaDatos
{
    public class datHabitacion
    {
        #region singleton
        private static readonly datHabitacion _instancia = new datHabitacion();
        public static datHabitacion Instancia
        {
            get { return datHabitacion._instancia; }
        }
        #endregion

        #region metodos
        public int RegistrarHabitacionXML(String cadXML)
        {
            SqlCommand cmd = null;
            try
            {
                //Conexion cn = new Conexion();
                SqlConnection conex = Conexion.Instancia.Conectar();
                cmd = new SqlCommand("sp_RegistrarHabitacionXML", conex);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@prmstrCadXML", cadXML);
                conex.Open();
                int i = cmd.ExecuteNonQuery();
                return i;
            }
            catch (Exception e)
            {
                throw e;//pasa el error al objeto que lo invoca.
            }
            finally
            {
                cmd.Connection.Close();
            }
        }
        public bool RegistrarHabitacion(entHabitacion h)
        {
            SqlCommand cmd = null;
            bool retorno = false;
            try
            {
                SqlConnection conex = Conexion.Instancia.Conectar();
                cmd = new SqlCommand("sp_RegistrarHabitacion", conex);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@prmIdTipoHabitacion", h.TipoHabitacion.IdTipoHabitacion);
                cmd.Parameters.AddWithValue("@prmPisoHabitacion", h.PisoHabitacion);
                cmd.Parameters.AddWithValue("@prmNumeroHabitacion", h.NumeroHabitacion);
                cmd.Parameters.AddWithValue("@prmImagen", h.Imagen);
                conex.Open();
                int filas = cmd.ExecuteNonQuery();
                if (filas > 0)
                {
                    retorno = true;
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                cmd.Connection.Close();
            }
            return retorno;
        }

        public List<entHabitacion> ListarHabitaciones()
        {
            SqlCommand cmd = null;
            SqlDataReader dr = null;
            List<entHabitacion> Lista = null;
            try
            {
                SqlConnection conex = Conexion.Instancia.Conectar();
                cmd = new SqlCommand("sp_ListarHabitaciones", conex);
                cmd.CommandType = CommandType.StoredProcedure;
                conex.Open();
                dr = cmd.ExecuteReader();
                Lista = new List<entHabitacion>();
                while (dr.Read())
                {
                    entHabitacion h = new entHabitacion();
                    h.IdHabitacion = Convert.ToInt32(dr["IDHABITACION"]);
                    h.NumeroHabitacion = Convert.ToInt32(dr["NUMEROHABITACION"]);
                    h.PisoHabitacion = Convert.ToInt32(dr["PISOHABITACION"]);
                    h.Imagen = dr["IMAGEN"].ToString();
                    h.Estado = Convert.ToChar(dr["ESTADO"]);
                    entTipoHabitacion th = new entTipoHabitacion();
                    th.IdTipoHabitacion = Convert.ToInt32(dr["IDTIPOHABITACION"]);
                    th.NombreTipoHab = dr["NOMBRETIPOHAB"].ToString();
                    th.Precio = Convert.ToDouble(dr["PRECIO"]);
                    th.Descripcion = dr["DESCRIPCION"].ToString();
                    h.TipoHabitacion = th;
                    Lista.Add(h);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                cmd.Connection.Close();
            }
            return Lista;
        }
        public List<entHabitacion> BusquedaHabitacionXFechas(String FecEntrada, String FecSalida)
        {
            SqlCommand cmd = null;
            SqlDataReader dr = null;
            List<entHabitacion> Lista = null;
            try
            {
                SqlConnection cn = Conexion.Instancia.Conectar();
                cmd = new SqlCommand("SP_LISTAR_HABITACIONES_X_FECHA", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@PRMFECENTRADA", FecEntrada);
                cmd.Parameters.AddWithValue("@PRMFECSALIDA", FecSalida);
                cn.Open();
                dr = cmd.ExecuteReader();
                Lista = new List<entHabitacion>();
                while (dr.Read())
                {
                    entHabitacion h = new entHabitacion();
                    h.IdHabitacion = Convert.ToInt16(dr["IDHABITACION"]);
                    h.NumeroHabitacion = Convert.ToInt16(dr["NUMEROHABITACION"]);
                    h.Imagen = dr["IMAGEN"].ToString();
                    entTipoHabitacion th = new entTipoHabitacion();
                    th.NombreTipoHab = dr["NOMBRETIPOHAB"].ToString();
                    th.Precio = Convert.ToDouble(dr["PRECIO"]);
                    th.Descripcion = dr["DESCRIPCION"].ToString();
                    h.TipoHabitacion = th;
                    Lista.Add(h);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            finally { cmd.Connection.Close(); }
            return Lista;
        }
        #endregion
    }
}
